home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / ingres04.lzh / source / libq / IIpb_read.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-01-23  |  1.8 KB  |  94 lines

  1. # include    <ingres.h>
  2. # include    "IIglobals.h"
  3. # include    <sccs.h>
  4.  
  5. SCCSID(@(#)IIpb_read.c    8.1    12/31/84)
  6.  
  7.  
  8. /*
  9. **  IIPB_READ -- read a pipe block
  10. **
  11. **    This routine reads a pipe block into *ppb.  It also handles
  12. **    all the low level protocol: RESET blocks, SYNC blocks, META
  13. **    blocks, blocks intended for another process, etc.
  14. **
  15. **    When this routine returns, it returns with a block intended
  16. **    for this process, which must be a REGULAR block, a RESPONSE
  17. **    block, or an ERROR block.
  18. **
  19. **    Parameters:
  20. **        ppb -- a pointer to the area which wants the block.
  21. **
  22. **    Returns:
  23. **        none
  24. **
  25. **    Side Effects:
  26. **        ppb is set to the named block.
  27. **        Virtually any amount of stuff can happen, depending
  28. **            on what is coming through the pipe.
  29. **
  30. **    Trace Flags:
  31. **        12.4 - 12.9
  32. */
  33.  
  34.  
  35. IIpb_read(ppb)
  36. register pb_t    *ppb;
  37. {
  38.     register int    type;
  39.     register int    from;
  40.  
  41.     /*
  42.     **  Top Loop.
  43.     **    Hang waiting for a normal block.  Other blocks are
  44.     **        handled inside the loop.
  45.     **    We multiplex 'from' in here temporarily.
  46.     */
  47.  
  48.     for (;;)
  49.     {
  50.         from = IIpb_rphys(ppb, IIinput);
  51.  
  52.         if (from != PB_IOSIZE)
  53.             IIsyserr("pb_read: read error (%d)", from);
  54.  
  55.         /* set up buffer pointers, etc. */
  56.         ppb->pb_xptr = ppb->pb_data;
  57.         ppb->pb_nleft = ppb->pb_nused;
  58.         type = ppb->pb_type;
  59.         from = ppb->pb_from;
  60.  
  61.         /* do sync block processing */
  62.         if (type == PB_SYNC)
  63.         {
  64.             IISyncs[from]--;
  65.             continue;
  66.         }
  67.  
  68.         /* see if we are ignoring from this process */
  69.         if (IISyncs[from] > 0)
  70.             continue;
  71.  
  72.         /*
  73.         **  Block type dispatching.
  74.         **    Regular, response, and error blocks return.
  75.         **    Meta blocks are handled by calling other
  76.         **        routines.
  77.         */
  78.  
  79.         switch (type)
  80.         {
  81.           case PB_REG:
  82.           case PB_RESP:
  83.           case PB_ERR:
  84.             /* handled by readinput() */
  85.             return;
  86.  
  87.           /* insert more meta handling before this line */
  88.  
  89.           default:
  90.             IIsyserr("pb_read: type %d", type);
  91.         }
  92.     }
  93. }
  94.